package com.hhh.springai_test.model.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

/**
 * 用户实体类
 *
 * 该类表示系统中的用户，包含了用户的基本信息和相关操作
 * 实现了Serializable接口以支持对象的序列化，主要用于网络传输和持久化存储
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {

    /**
     * 序列化ID
     *
     * 用于标识序列化对象的版本，确保类的修改不会影响到已有的序列化数据
     */
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     *
     * 主键，使用自动分配的方式生成唯一的用户ID
     */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 用户名
     *
     * 用户登录时使用的名称，唯一标识一个用户
     */
    private String username;

    /**
     * 密码
     *
     * 用户登录时使用的密码，应进行加密存储以保证安全性
     */
    private String password;

    /**
     * 昵称
     *
     * 用户在系统中显示的名称，用于保护用户隐私
     */
    private String nickName;

    /**
     * 邮箱
     *
     * 用户的电子邮件地址，可用于密码找回等功能
     */
    private String email;

    /**
     * 头像URL
     *
     * 用户头像的网络地址，用于展示用户形象
     */
    private String avatarUrl;

    /**
     * 性别
     *
     * 用户性别，可能的取值包括男、女等，用于个性化展示
     */
    private Integer gender;

    /**
     * 地址
     *
     * 用户的居住地或工作地，用于提供个性化服务
     */
    private String address;

    /**
     * 电话号码
     *
     * 用户的联系电话，用于紧急情况下的联系
     */
    private String phone;

    /**
     * 微信码
     *
     * 用户的微信二维码或微信号，用于社交连接
     */
    private String WXCode;

    /**
     * 用户简介
     *
     * 用户自我介绍的信息，让其他人更好地了解用户
     */
    private String userProfile;

    /**
     * 用户角色user/admin/ban
     */
    private String userRole;

    /**
     * 创建时间
     *
     * 记录用户账户创建的时间，用于审计和统计
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新时间
     *
     * 记录用户信息最后一次更新的时间，用于审计和同步
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 删除标志
     *
     * 逻辑删除字段，用于标记用户是否被删除，以避免物理删除
     */
    @TableLogic
    private Integer isDelete;

}

